// 不要在这里引入 @/utils/request（以及store等引入了request的模块） 因为 request 里面用到了 global.HOST,而global.HOST是这里才定义的，会导致先后顺序的问题
// 不要在这里引入 @/utils/request（以及store等引入了request的模块） 因为 request 里面用到了 global.HOST,而global.HOST是这里才定义的，会导致先后顺序的问题
// 不要在这里引入 @/utils/request（以及store等引入了request的模块） 因为 request 里面用到了 global.HOST,而global.HOST是这里才定义的，会导致先后顺序的问题
// 这边单独抽出来是为了 chunk 开发能复用
// 这边单独抽出来是为了 chunk 开发能复用
// 这边单独抽出来是为了 chunk 开发能复用
import Vue from 'vue'
import {epChunk, epEnv} from '@/common/vars'
import {changeProtocol} from '@/utils/data'
import {getBrowser} from '@/utils/device'
import Bus from '@/core/bus'
import keepAlive from '@/core/keepAlive'

// 三方库
import epui from 'ep-ui'
import settings from './settings'
import 'ep-ui/theme/lib/epui.min.css' // ep-ui原始样式
import 'ep-ui/theme/lib/ionicons2/ionicons2.min.css' // 图标CSS资源
import 'ep-ui/theme/lib/ionicons3/ionicons3.min.css' // 新图标库
import '@ep-plugin/epicon/epicon.min.css' // 公司业务通用图标库，可选
// import "@ep-plugin/epicon/epicon.min.css"
import dayjs from 'dayjs'

initConfig()

// 全局使用中文
dayjs.locale('zh-cn')

// 修改 keep-alive
Vue.component('keep-alive', keepAlive)

// 引入ep-ui等
let epuiConfig = {
  messagePlain: true
  // size: 'small'
}
if (settings.epuiMobile) {
  epuiConfig.mobile = true
}
Vue.use(epui, epuiConfig)

// bus
Vue.prototype.$app = Bus

// 时间格式化

// 通用提示
let messageDefaultOption = {
  // top: '88px'
}
Vue.prototype.$err = function (info, option = messageDefaultOption) {
  Vue.prototype.$pop({
    type: 'danger',
    message: info,
    ...Object.assign({}, messageDefaultOption, option)
  })
}
Vue.prototype.$warn = function (info, option = messageDefaultOption) {
  Vue.prototype.$pop({
    type: 'warning',
    message: info,
    ...Object.assign({}, messageDefaultOption, option)
  })
}
Vue.prototype.$success = function (info, option = messageDefaultOption) {
  Vue.prototype.$pop({
    type: 'success',
    message: info,
    ...Object.assign({}, messageDefaultOption, option)
  })
}
Vue.prototype.$info = function (info, option = messageDefaultOption) {
  Vue.prototype.$pop({
    type: 'info',
    message: info,
    ...Object.assign({}, messageDefaultOption, option)
  })
}

function initConfig() {
  // 用于判断环境的全局变量
  global.epFrameworkVersion = '2.0'
  let browserInfo = getBrowser()
  if (['safari', 'chrome', 'edge'].indexOf(browserInfo.name) !== -1) {
    global.EPUI_SCROLLBAR_WIDTH = 5 // body 的 滚动条宽度 用于 modal 等计算滚动条宽度
  }
  Vue.prototype.$browserInfo = browserInfo
  global.$browserInfo = browserInfo
  Vue.prototype.$env = epEnv.env
  global.$env = epEnv.env
  global.settings = settings
  if (SCRIPT_TYPE === 'serve') {
    // 开发 方便不重启
    global.EPCHUNK = epChunk
    global.EPENV = epEnv
  } else {
    // 测试生产
    global.EPCHUNK = EPCHUNK || global.EPCHUNK
    global.EPENV = EPENV || global.EPENV
  }

  global.appCode = epEnv.appCode || ''
  /**
   * 因为 url 类型的参数，可能需要 changeProtocol， 因此定义在global(window)下，但避免过度使用污染全局
   * 配合 epEnv 引入方式，可以做到不重启热重载
   * 其他字符类的参数，推荐直接使用如：EPENV.xxxx，省的每次还要在这里定义，当然定义env.js中需要重启
   * 如果chunk需要兼容老架子，要么不用epEnv 要么老架子里定义一个 window 变量 EPENV
   */
  global.HOST = changeProtocol(epEnv.serverUrl)
  global.HUNTERHOST = changeProtocol(epEnv.hunterUrl)
  global.HUNTERGATEWAY = changeProtocol(epEnv.hunterGateway)
  // #EPFC-microapp-start
  global.CHILDAPP1HOST = changeProtocol(epEnv.childApp1Url)
  global.CHILDAPP2HOST = changeProtocol(epEnv.childApp2Url)
  global.CHILDAPP3HOST = changeProtocol(epEnv.childApp3Url)
  // #EPFC-microapp-end

  global.CMSHOSTAPI = changeProtocol(epEnv.epcmsApi)

  global.H4a = changeProtocol(epEnv.H4a)

  // #EPFC-wujie-start
  // wujie 微前端
  if (window.__POWERED_BY_WUJIE__) {
    // eslint-disable-next-line
    window.__webpack_public_path__ = window.__WUJIE_PUBLIC_PATH__
  }
  // #EPFC-wujie-end
}
